package com.zixue.heima.helloNetty.EventLoopGroopDemo;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufAllocator;
import lombok.extern.slf4j.Slf4j;

/**
 * @ClassName : SliceDemo
 * @Description : TODO
 * @Author : chunxiong
 * @Date : 2025/5/11 02:20
 * @Version 1.0
 */
@Slf4j
public class SliceDemo {

    public static void main(String[] args) {
        ByteBuf byteBuf = ByteBufAllocator.DEFAULT.buffer(5);
        byteBuf.writeBytes(new byte[]{'a','b','c','d','e'});
        log.debug("====byteBuf:" + byteBuf);
        ByteBuf slice1 = byteBuf.slice(0,3);
        slice1.retain(); // 引用计数 1   这样回收原有的， 用分片不会报错
        log.debug("====slice1:" + slice1);
        //切片后 最大容量就限制了 再添加就报; // 引用计数 1错
        //释放原有bUf 再使用切片会报错
        ByteBuf slice2 = byteBuf.slice(4,1);
        slice2.retain(); // 引用计数 1   这样回收
        log.debug("====slice2:" + slice2);
        byteBuf.release();// 引用计数-1

        //用完自己去relase
        slice1.release();
        slice2.release();
    }
}
